基于之前的vivado工程按照原理图修改参数:
原理图:
vivado修改参数:
Ethernet0的引脚在原理图中已经固定到PS端的MIO引脚上了:MIO16~MIO27。
勾选上MDIO,用于以太网的通信(MDIO(Management Data Input/Output)是一种用于以太网物理层芯片(PHY)管理的接口协议)。MIDIO对应的是MIO52和MIO53。
参数配置完成之后点击OK,BD如下:
同样,进行后续操作·,生成新的.xsa文件:
同样,先更新点击Update Hardware Specification:选择.xsa文件路径,出现以下弹框,点击OK,说明更新成功。
修改平台的BSP文件:添加上lwip库。虽然有俩个Board Support Package,但一定修改的是下面的内容,修改上面的创建应用工程时会报错。最后点击OK。
修改完之后一定记得右击平台工程进行Build Project:不重新Build的话后续创建应用工程也会报错。
进行应用工程的创建,唯一不同的点在选择模板时选择lwIP Echo Server:
可以根据需要修改IP地址(对应开发板的IP地址)
例如电脑的ip为192.168.3网段,为了让服务端和客户端能够ping通,所以在代码中要修改相应的IP地址以及网关到192.168.3的网段:
在V1.1.0的硬件设计中,eth的PHY芯片由RTL8211E更换成RTL8211F。目前vitis中提供的LWIP驱动中,不支持RTL8211F,所以需要修改LWIP的源码。
对应需要修改的文件是C:\Xilinx\Vitis\2021.1\data\embeddedsw\ThirdParty\sw_services\lwip211_v1_5\src\contrib\ports\xilinx\netif\xemacpsif_physpeed.c
x// Add RTL8211F macro definition.
// Modified the get_Realtek_phy_speed function to support RTL8211F.static u32_t get_Realtek_phy_speed(XEmacPs *xemacpsp, u32_t phy_addr){ ... u16_t phy_identity2 = 0; ... xil_printf("autonegotiation complete \r\n");
//Identify PHY model XEmacPs_PhyRead(xemacpsp, phy_addr, PHY_IDENTIFIER_2_REG, &phy_identity2);
switch (phy_identity2) { case PHY_REALTEK_RTL8211F: { xil_printf("detected RTL8211F \r\n"); //Switch to page 0xd08 XEmacPs_PhyWrite(xemacpsp, phy_addr, RTL8211F_PAGSR, RTL8211F_MIICR_PAGE); // enable TXDLY XEmacPs_PhyRead(xemacpsp, phy_addr, RTL8211F_MIICR, &control); XEmacPs_PhyWrite(xemacpsp, phy_addr, RTL8211F_MIICR, control | RTL8211F_TXDLY_MASK);
//Switch to page 0xA43 XEmacPs_PhyWrite(xemacpsp, phy_addr, RTL8211F_PAGSR, RTL8211F_PHYSR_PAGE); XEmacPs_PhyRead(xemacpsp, phy_addr, RTL8211F_PHYSR, &status_speed); //Switch back to default page XEmacPs_PhyWrite(xemacpsp, phy_addr, RTL8211F_PAGSR, 0); //If there is link if (status_speed & RTL8211F_PHYSR_LINK_MASK) { temp_speed = status_speed & RTL8211F_PHYSR_SPEED_MASK;
if (temp_speed == RTL8211F_PHYSR_1000) return 1000; else if(temp_speed == RTL8211F_PHYSR_100) return 100; else return 10; } break; } case PHY_REALTEK_RTL8211E: xil_printf("detected RTL8211E \r\n"); //RTL8211E fall-back to default Realtek behaviour default: { XEmacPs_PhyRead(xemacpsp, phy_addr,IEEE_SPECIFIC_STATUS_REG, &status_speed); if (status_speed & 0x400) { temp_speed = status_speed & IEEE_SPEED_MASK;
if (temp_speed == IEEE_SPEED_1000) return 1000; else if(temp_speed == IEEE_SPEED_100) return 100; else return 10; } break; } } return XST_FAILURE;}修改完之后,重启vitis,并重新编译平台工程。
你也可以从github上下载修改好的lwip压缩包。
编译工程成功后,用type-c USB线将开发板的JTAG和电脑连接,使用另外一根type-c USB线将开发板的PS UART和电脑连接。找一个网线和电脑连接上,在电脑上打开串口调试工具MobaXterm,和开发板的PS UART建立连接。上电后通过串口观察到网络已经启动,并且 网络IP为192.168.3.150,服务的端口为7。
用在电脑端 ping 一下这个IP, 可以ping 通,说明网络连接成功了:
在电脑上通过网络调试助手连接开发板的服务端后,给开发板发送的数据会回环回来(设置的端口号是7,IP地址按照之前串口读到的板子IP地址设置)。